วิธีการใช้ Client VPN ในการ Name Resolver ให้กับ Resource records ใน Private hosted zone (AWS)
สวัสดีครับ ต้า ครับ
วันนี้เราจะมาทำการทดลองกันครับ
แต่ก่อนอื่นที่เราจะทำการทดลอง ผมจะขออธิบายเกี่ยวกับที่มาที่ไป, สิ่งที่อยากทำ, แล้วก็ Service ที่เกี่ยวข้องในบทความนี้กันก่อนครับ
ที่มาที่ไป
โดยก่อนอื่นเรามาทำความเข้าใจเกี่ยวกับ Private hosted zone ใน Route 53 กันก่อนครับ
AWS จะมี Service ที่มีชื่อว่า Route 53 ซึ่งใช้ในการจัดการเกี่ยวกับ Domain หรือ Host zone ต่างๆ ครับ
โดยถ้าจะให้ยกอย่างให้เห็นภาพว่าเอาไว้ทำอะไร ผมเคยเขียนบทความที่ได้ลองซื้อ Domain จริงๆมาจาก Route 53 แล้วสามารถตรวจสอบได้จากบทความต่อไปนี้ด้วยครับ
(กลับเข้าเรื่อง)
สำหรับการสร้าง hosted zone จะมีอยู่ 2 แบบ คือ Public และ Private ครับ
โดยในแต่ละชนิดจะมีความสามารถที่ต่างกันครับ
Public: ใช้สำหรับให้สาธารณะ อุปกรณ์ต่างๆที่ใช้ Public internet ที่อยู่ภายนอก AWS จะสามารถตรวจพบ Hosted zone นี้ได้
Private: ใช้สำหรับภายในวง VPC หรือภายใน AWS โดยที่อุปกรณ์ต่างๆที่อยู่ภายนอก AWS จะไม่สามารถตรวจพบ หรือ เข้าถึง private hosted zone ได้
สำหรับใครที่ยังไม่เห็นภาพของ Private Hosted zone สามารถตรวจสอบเพิ่มเติมจากบทความต่อไปนี้ได้ครับ
จากหัวข้อด้านบนนี้ ผมเขียนไว้ว่า Private คนภายนอกจะไม่สามารถเข้าถึงได้ก็จริง แต่ก็มีวิธีการอยู่ที่จะให้คนภายนอก VPC หรือ AWS เข้าถึงได้โดยการใช้ VPN ครับ
และนั่นก็คือสิ่งที่ผมอยากจะทำในบทความนี้ครับ
สิ่งที่อยากทำ
สิ่งที่ผมอยากทำก็คือใช้ Client VPN ในการเข้าถึง Private hosted zone ใน AWS ครับ
ตามภาพโครงสร้างต่อไปนี้ครับ
ผมจะใช้ Client VPN ในการสวมรอยเข้ามาอยู่ในวง VPC ซึ่งการทำแบบนี้จะทำให้เราสามารถ Name resolution Private IP ในวง VPC ได้
แต่การทำแค่นี้จะไม่สามารถทำ Name resolution DNS Server ของ private hosted zone ใน Route 53 ได้ครับ
โดยการที่จะให้ Client VPN สามารถใช้งาน private hosted zone ได้
จำเป็นต้องใช้ Route 53 Resolver inbound endpoint (ตามในภาพ) เข้ามาช่วยในการเชื่อมต่อเข้าถึง private hosted zone ครับ
ลงมือทำ
สร้าง Client VPN
ในขั้นตอนแรกเราต้องสร้าง VPC และ Client VPN โดยเราสามารถอ้างอิงวิธีการสร้างได้จากบทความด้านล่างต่อไปนี้ได้ครับ
โดยรายละเอียดของ VPC ในบทความนี้จะมีดังต่อไปนี้
- CIDR ของ VPC คือ 10.111.0.0/16
- CIDR ของ Public subnet คือ 10.111.0.0/24
- เปิดการตั้งค่า DNS hostnames และ DNS resolution (ตามภาพด้านล่าง)
- Client CIDR ของ Client VPN คือ 10.112.0.0/22
ตั้งค่าให้ Client VPN สามารถเข้าถึง DNS Server ใน AWS ได้
*หากเราไม่ทำการเปิดใช้งานหัวข้อต่อไปนี้จะทำให้ Client VPN หา DNS servers ใน AWS ไม่เจอ
เลือก Action
แล้วเลือก Modify client VPN endpoint
เปิดหัวข้อ Enable DNS servers
ในช่อง DNS server 1 IP address ให้ใส่ ระยะ CIDR ของ VPC +2
เช่น ในบทความนี้ใช้ 10.111.0.0/16 ในช่อง DNS server 1 IP address ให้ใส่ 10.111.0.2 (มาจาก 10.111.0.0 + 2)
หลังจากนั้น เลื่อนมาล่างสุด กด Modify client VPN endpoint
สร้าง EC2
สร้าง EC2 ที่ติดตั้ง Apache + มีหน้า test.php อ้างอิงตามบทความต่อไปนี้
โดยมีรายละเอียดต่อไปนี้
- ไม่มี Public IP (เพื่อพิสูจน์ว่า เราเชื่อมต่อโดยใช้ Private IP เท่านั้น) ((แต่จะใช้ Public IP ก็ได้ เพื่อความสะดวกในการติดตั้ง PHP + Apache))
- ตั้งค่า Private IP เป็น 10.111.0.111 (เพื่อความเข้าใจง่าย)
- เปิด Security Group inbound rule: HTTP 0.0.0.0 (ทดสอบการเข้าถึงผ่าน browser)
*หมายเหตุ: หากทำการตั้งค่าเหมือนผมให้ใส่ Elastic IP กับ EC2 หลังจากนี้เพื่อการติดตั้ง PHP + Apache ผ่านอินเทอร์เน็ตได้ง่ายๆ (ติดตั้งเสร็จแล้วค่อยลบ Elastic IP ออก)
หลังจากการสร้าง EC2 แล้วให้เราเปิด Client VPN แล้วทำการเข้า EC2 ผ่าน Private IP(ในกรณีนี้คือ 10.111.0.111) หากได้ผลลัพท์ตามภาพด้านล่างถือว่าโอเค ไปทำขั้นตอนต่อไปได้ครับ
(ใครไม่ได้ แล้วใช้ Cloudflare WARP ลองปิด Cloudflare WARP ดูก่อนครับ)
สร้าง Private hosted zone
ไปที่ Route 53 Console
ไปที่ Hosted zones
ไปที่ Create hosted zone
ตั้งชื่อที่ Hosted zone ที่เราต้องการ (ในกรณีของบทความนี้คือ ec2.private)
เลือก Private hosted zone
เลือก Region และ VPC ที่เราสร้างขึ้น
แล้วกด Create hosted zone
เข้าไปที่ Hosted zone ที่เราสร้างขึ้น
กด Create Record
Record name: my
เลือกเป็น Type: A Record
Value: ให้ใส่เป็น Private IP ของ EC2(ในกรณีนี้คือ 10.111.0.111)
กด Create records
ถ้าได้ตามภาพด้านล่างแบบนี้คือ OK
สร้าง Route 53 Resolver inbound endpoint
ไปที่ Amazon Route 53 Resolver Console
เลือก Region ที่เราใช้งานอยู่(ในกรณีของบทความนี้คือ Singapore region)
เลือก Configure endpoints
เลือก Inbound only
กด Next
ตั้งค่าต่อไปนี้
Endpoint name: ใส่ชื่อที่เราต้องการ (ในกรณีของบทความนี้คือ test-re-inbound)
VPC in the Region: ap-southeast-1 (Singapore): เลือก VPC ที่เราสร้างขึ้น
Security group for this endpoint: เลือก Default Security Group
Endpoint Type: IPv4
IP addresses: เลือก Availability Zone และ Subnet ที่เราสร้างขึ้น
*หมายเหตุ: AWS จะบังคับให้เราใช้ 2 IP addresses เพื่อความ Availability ซึ่งทางที่ดี เราควรจะเลือก Availability Zone ที่แตกต่างกัน แต่เนื่องจาก บทความนี้ทำขึ้นเพื่อการทดสอบ เราจึงเลือก Availability Zone และ Subnet เดียวกัน เพื่อความเข้าใจง่าย
กด Next
กด Submit
เมื่อขึ้นตามภาพด้านล่าง ถือว่าเสร็จแล้วครับ
หลังจากนั้น ให้เราทำการเปิด Client VPN
เมื่อเราลองเข้าเว็บไซต์ไปยัง http://my.ec2.private/ จะพบว่าเราสามารถเข้าใช้งานได้แล้ว
นอกจากนี้ หากเราไปในหน้า http://my.ec2.private/test.php จะเห็นว่าที่มาของเว็บไซต์นี้คือ 10.111.0.111 ซึ่งเป็น ec2 ที่เราสร้างขึ้นครับ
หลังจากนั้นเมื่อเราใช้ dig หรือ lookup เพื่อ name resolver ดูก็จะได้ผลลัพท์ว่าเจอ URL ของเรา
$ dig my.ec2.private ; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> my.ec2.private ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4089 ;; flags: qr rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;my.ec2.private. IN A ;; ANSWER SECTION: my.ec2.private. 0 IN A 10.111.0.111 ;; Query time: 90 msec ;; SERVER: 172.26.128.1#53(172.26.128.1) (UDP) ;; WHEN: Fri Mar 08 17:05:01 +07 2024 ;; MSG SIZE rcvd: 62
และเพื่อเป็นการตรวจสอบให้แน่ใจ เราลองทำการปิด Client VPN แล้วทำอย่างเดิมดู จะเห็นได้ว่า http://my.ec2.private/ ของเราไม่สามารถเข้าใช้งานได้ และทำการ dig ก็จะไม่เจอผลลัพทเหมือนเดิมแล้ว
การลบ Resource ที่สร้างขึ้นมาในบทความนี้
วิธีการลบ Resource ต่างๆที่สร้างขึ้นบทความนี้สามารถอ้างอิงลำดับได้จากภาพต่อไปได้เลยครับ
Inbound endpoints
Record
Hosted zone
Elastic IP(หากได้สร้าง)
EC2
สำหรับวิธีการลบ Resource ที่เกี่ยวกับ Client VPN ไม่ได้พาทำในบทความนี้สามารถอ้างอิงวิธีลบได้จากบทความต่อไปนี้
สรุป
ก็จบกันไปแล้วสำหรับวิธีการทำยังไงให้ Client VPN เข้าถึง Private hosted zone (AWS) หวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่ใช้ Client VPN กันอยู่นะครับ
แล้วเจอกันในบทความต่อไปครับ
บทความที่เกี่ยวข้อง
- วิธีการซื้อ Domain บน Route 53 | DevelopersIO
- Private hosted zone (AWS) วิธีสร้าง hosted zone ส่วนตัวสำหรับใช้ local DNS ภายใน AWS | DevelopersIO
- วิธีการใช้งาน AWS Client VPN | DevelopersIO
- วิธีติดตั้ง PHP 8.2 และ Apache ใน Amazon Linux 2023 บน EC2 | DevelopersIO
- Amazon VPC คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS | DevelopersIO
- การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance | DevelopersIO